package com.dkd.day20250620;

public class SolutionLCS2 {

    public static void main(String[] args) {

    }
    public String LCS (String s1, String s2) {
        // write code here
        int m = s1.length();
        int n = s2.length();
        int[][] dp = new int[m + 1][n +
                1]; // dp[i][j] 表示 text1[0..i-1] 和 text2[0..j-1] 的 LCS 长度

        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }

        // 2. 处理 LCS 长度为 0 的情况
        if (dp[m][n] == 0) {
            return "-1"; // 无公共子序列
        }

        // 2. 回溯构造 LCS 字符串
        StringBuilder lcs = new StringBuilder();
        int i = m, j = n;
        while (i > 0 && j > 0) {
            if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
                lcs.append(s1.charAt(i - 1)); // 当前字符属于 LCS
                i--;
                j--;
            } else if (dp[i - 1][j] > dp[i][j - 1]) {
                i--; // 移动到上方
            } else {
                j--; // 移动到左方
            }
        }

        return lcs.reverse().toString();
    }
}
